package cn.iocoder.yudao.module.im.service;

import cn.iocoder.yudao.module.im.dal.dataobject.ImUserStatusDO;

import java.util.List;

/**
 * 用户在线状态服务接口
 *
 * @author 芋道源码
 */
public interface ImUserStatusService {

    /**
     * 设置用户在线状态
     *
     * @param userId 用户ID
     * @param status 在线状态
     * @param deviceId 设备ID
     * @return 用户在线状态ID
     */
    Long setUserStatus(Long userId, Integer status, String deviceId);

    /**
     * 获取用户在线状态
     *
     * @param userId 用户ID
     * @return 用户在线状态
     */
    ImUserStatusDO getUserStatus(Long userId);

    /**
     * 获取用户在特定设备上的在线状态
     *
     * @param userId 用户ID
     * @param deviceId 设备ID
     * @return 用户在线状态
     */
    ImUserStatusDO getUserStatusByDeviceId(Long userId, String deviceId);

    /**
     * 获取用户的所有设备状态
     *
     * @param userId 用户ID
     * @return 用户在线状态列表
     */
    List<ImUserStatusDO> getUserAllDeviceStatus(Long userId);

    /**
     * 更新用户最后活跃时间
     *
     * @param userId 用户ID
     * @param deviceId 设备ID
     * @return 是否更新成功
     */
    boolean updateLastActiveTime(Long userId, String deviceId);

    /**
     * 下线用户
     *
     * @param userId 用户ID
     * @param deviceId 设备ID
     * @return 是否下线成功
     */
    boolean offlineUser(Long userId, String deviceId);

}